package com.yupi.springbootinit.manager;




import com.yupi.springbootinit.common.ErrorCode;
import com.yupi.springbootinit.exception.BusinessException;
import org.redisson.api.RRateLimiter;
import org.redisson.api.RateIntervalUnit;
import org.redisson.api.RateType;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 *  专门提供 redisLimiter 限流的基本服务
 */
@Component
public class RedisLimiterManager {

    //不是注入redissonConfig
    @Autowired
    private RedissonClient redissonClient;

    /**
     * 限流操作
     * key 用于区分不同的限流器
     */
    public void doRedisLimiter(String key) {
        //创建一个名为 key 的限流器
        RRateLimiter rateLimiter = redissonClient.getRateLimiter(key);
        //把所有的服务器作为整体 每秒可以访问5次
        rateLimiter.trySetRate(RateType.OVERALL,5,1, RateIntervalUnit.SECONDS);
        boolean b = rateLimiter.tryAcquire(1);
        if (!b){
            throw new BusinessException(ErrorCode.TOO_MANY_REQUEST);
        }
    }


}
